package pers.ijfxu.testngext;

import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;

import org.testng.ITestNGListener;
import org.testng.TestNG;

import pers.ijfxu.testngext.context.RunContext;
import pers.ijfxu.testngext.listener.FileRenderListener;
import pers.ijfxu.testngext.listener.TestCaseGeneratorListener;
import pers.ijfxu.testngext.utils.PathUtils;

/**
 * testNGExt启动类
 *
 * @author ijfxu
 * @since 2022/10/22 上午12:05
 */
public class TestNGExt extends TestNG {
    private List<Class<? extends ITestNGListener>> listeners = new ArrayList<>();

    /**
     * 初始化父类，并添加自定义监听器
     */
    public TestNGExt() {
        super();
        this.listeners.add(TestCaseGeneratorListener.class);
        this.listeners.add(FileRenderListener.class);
    }

    /**
     * 提供给调用者添加自定义监听器
     * 
     * @param listener java.lang.Class 监听器类型  
     * @author ijfxu
     * @since 2022/4/18 23:38
     */
    public void registerListener(Class<? extends ITestNGListener> listener) {
        this.listeners.add(listener);
    }

    /**
     * 获取测试套件
     * @return 测试套件文件列表  
     * @author ijfxu
     * @since 2022/4/18 23:38
     */
    private static List<String> getSuites() {
        String suitePath = PathUtils.getResource(RunContext.suitesDir);
        return Stream.of(new File(suitePath).listFiles()).map(file -> file.getAbsolutePath())
                .collect(Collectors.toList());

    }
    
    /**
     * 执行测试  
     * @author ijfxu
     * @since 2022/4/18 23:38
     */
    @Override
    public void run() {
        this.setTestSuites(getSuites());
        this.setListenerClasses(listeners);
        super.run();
    }

 

}